# main.py
import sys
import os
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QTabWidget
from PySide6.QtGui import QIcon

# 导入全局数据类和各Tab组件
from app_data import AppData
from widgets.file_widget import FileWidget
from widgets.device_config_widget import DeviceConfigWidget
from widgets.bms_config_widget import BmsConfigWidget
from widgets.workstep_config_widget import WorkstepConfigWidget
from widgets.data_process_widget import DataProcessWidget

class CSVProcessingApp(QMainWindow):
    """主窗口：组合所有Tab组件"""

    def __init__(self):
        super().__init__()
        self.init_basic_setting()
        self.init_global_data()
        self.init_tab_widgets()
        self.init_main_layout()
        self.app_data = AppData()
        self.connect_signals()  # 新增：连接各组件信号

    def connect_signals(self):
        """连接各Tab之间的信号，实现数据同步"""
        # 1. 文件选择页的列名信号 → 更新全局数据 + 通知BMS配置页
        self.file_tab.csv_columns.connect(self._update_file_columns)
        # 1. 文件选择Tab → 下一步到设备配置（索引1）
        self.file_tab.next_clicked.connect(lambda: self.tabs.setCurrentIndex(1))
        # 2. 设备配置Tab → 上一步到文件选择（索引0），下一步到BMS配置（索引2）
        self.device_tab.prev_clicked.connect(lambda: self.tabs.setCurrentIndex(0))
        self.device_tab.next_clicked.connect(lambda: self.tabs.setCurrentIndex(2))
        # 3. BMS配置Tab → 上一步到设备配置（索引1），下一步到工步配置（索引3）
        self.bms_tab.prev_clicked.connect(lambda: self.tabs.setCurrentIndex(1))
        self.bms_tab.next_clicked.connect(lambda: self.tabs.setCurrentIndex(3))
        # 4. 工步配置Tab → 上一步到BMS配置（索引2），下一步到数据处理（索引4）
        self.workstep_tab.prev_clicked.connect(lambda: self.tabs.setCurrentIndex(2))
        self.workstep_tab.next_clicked.connect(lambda: self.tabs.setCurrentIndex(4))
        # 5. 数据处理Tab → 上一步到工步配置（索引3）（无下一步）
        self.process_tab.prev_clicked.connect(lambda: self.tabs.setCurrentIndex(3))

    def _update_file_columns(self, columns):
        """更新全局列名，并通知BMS配置页刷新下拉框"""
        # 1. 保存列名到全局数据
        self.app_data.csv_columns = columns
        # 2. 通知BMS配置页更新下拉框
        self.bms_tab.update_combobox_items(columns)

    def init_basic_setting(self):
        """基础窗口设置（标题、大小、图标）"""
        self.setWindowTitle("电池测试数据处理器——DESIGNED BY 重庆TVD张松（5370771）")
        self.setGeometry(300, 100, 1200, 800)  # 位置和大小
        # 设置窗口图标（需确保static目录下有byd.png）
        if os.path.exists("./static/byd.png"):
            self.setWindowIcon(QIcon("./static/byd.png"))

    def init_global_data(self):
        """初始化全局共享数据"""
        self.app_data = AppData()

    def init_tab_widgets(self):
        """实例化所有Tab组件"""
        # 1. 文件选择
        self.file_tab = FileWidget(self.app_data, self)
        # 2. 设备配置
        self.device_tab = DeviceConfigWidget(
            self.app_data
        )
        # 3. BMS列配置
        self.bms_tab = BmsConfigWidget(
            app_data=self.app_data
        )
        # 4. 工步配置
        self.workstep_tab = WorkstepConfigWidget()
        # 5. 数据处理
        self.process_tab = DataProcessWidget(
            self.app_data,
            self
        )
        self.bms_tab.bms_table.bms_names.connect(self.process_tab.output_configurator.indicator_table.update_columns)

    def init_main_layout(self):
        """搭建主窗口布局（QTabWidget组合所有Tab）"""
        main_widget = QWidget()
        self.setCentralWidget(main_widget)
        main_layout = QVBoxLayout(main_widget)

        # 创建标签页容器
        self.tabs = QTabWidget()
        # 添加各Tab到容器
        self.tabs.addTab(self.file_tab, "1. 文件选择")
        self.tabs.addTab(self.device_tab, "2. 设备配置")
        self.tabs.addTab(self.bms_tab, "3. BMS列配置")
        self.tabs.addTab(self.workstep_tab, "4. 工步配置")
        self.tabs.addTab(self.process_tab, "5. 数据处理")

        main_layout.addWidget(self.tabs)
        # 状态栏
        self.status_bar = self.statusBar()
        self.status_bar.showMessage("就绪")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setStyle("Fusion")  # 设置界面风格
    window = CSVProcessingApp()
    window.show()
    sys.exit(app.exec())